package common;

import org.junit.Test;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.TimeUnit;

/**
 * SimpleDateFormat 是线程不安全的类，一般不要定义为 static 变量，  如果定义为
 * static，必须加锁，或者使用 DateUtils 工具类。
 *
 * 如果是 JDK8 的应用，可以使用 Instant 代替 Date，LocalDateTime 代替 Calendar，
 * DateTimeFormatter代替Simpledateformatter，官方给出的解释：simple beautiful strong
 * immutable thread-safe。
 */
public class Example_DateFormate {


    private static final ThreadLocal<DateFormat> df = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-mm-dd hh:mm:ss"));

    @Test
    public void getNowDate(){
        DateFormat dateFormat = df.get();
        Calendar calendar = dateFormat.getCalendar();
        String calendarType = calendar.getCalendarType();
        System.out.println(calendarType);
        String format = dateFormat.format(new Date());
        System.out.println(format);
    }


    /**
     * 使用 Instant代替Date()
     */

    @Test
    public void getNowDateByInstaant(){
        Instant instant = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(8));
        String string = instant.toString();
        System.out.println(string);
    }
}
